﻿Imports DevComponents.DotNetBar

Public Class FrmCapturaOrdenCompra
    Dim Codigo As String
    Dim g As Guid

    Private Sub FrmCapturaOrdenCompra_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Orden_Compra' Puede moverla o quitarla según sea necesario.
            'Me.Orden_CompraTableAdapter.Fill(Me.DataSet_Prod_Serv.Orden_Compra)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Cotizacion_Producto' Puede moverla o quitarla según sea necesario.
            'Me.Cotizacion_ProductoTableAdapter.Fill(Me.DataSet_Prod_Serv.Cotizacion_Producto)

            'Todo esto son los colores de los controles que por alguna razón no los toma en sus propiedades del diseñador ಥ_ಥ 
            Me.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            lblNombre.ForeColor = SystemColors.MenuHighlight
            lbSub1.ForeColor = SystemColors.MenuHighlight
            lbSub2.ForeColor = SystemColors.MenuHighlight
            lblCodigo2.BackColor = Color.FromArgb(43, 87, 154)
            lblCodigo2.ForeColor = Color.White
            lblFolio.BackColor = Color.FromArgb(43, 87, 154)
            lblFolio.ForeColor = Color.White
            PageSlider1.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            PageSliderPage1.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            slideOpciones.BackColor = Color.Black
            panelOpciones.BackColor = Color.Black


            slideFolio.BackColor = Color.FromArgb(43, 87, 154)
            slideFolio.Left = Me.Size.Width / 4
            slideFolio.Top = Me.Size.Height / 4
            slideFolio.IsOpen = False
            If _Editar Then
                'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Orden_Compra' Puede moverla o quitarla según sea necesario.
                Me.Orden_CompraTableAdapter.Fill_Buscar_Orden(Me.DataSet_Prod_Serv.Orden_Compra, _FOLIOCOMPRA)
                'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Almacen_Digital' Puede moverla o quitarla según sea necesario.
                Me.Almacen_DigitalTableAdapter.Fill_Buscar_Folio(Me.DataSet_Prod_Serv.Almacen_Digital, _FOLIOCOMPRA)
                Dim filas As Integer = 0
                For Each fila As DataRow In Me.DataSet_Prod_Serv.Orden_Compra
                    Me.dgvOrdenCompra.Rows.Add()
                    Me.dgvOrdenCompra.Rows(filas).Cells(0).Value = fila.Item(7).ToString
                    Me.dgvOrdenCompra.Rows(filas).Cells(1).Value = fila.Item(6).ToString
                    Me.dgvOrdenCompra.Rows(filas).Cells(2).Value = fila.Item(8).ToString
                    Me.dgvOrdenCompra.Rows(filas).Cells(3).Value = fila.Item(9).ToString
                    Me.dgvOrdenCompra.Rows(filas).Cells(4).Value = fila.Item(3).ToString
                    Me.dgvOrdenCompra.Rows(filas).Cells(5).Value = fila.Item(4).ToString
                    lblCodigo.Text = fila.Item(10).ToString
                    filas += 1
                Next
                lblFolio.Text = _FOLIOCOMPRA 
                lblEstado.Text = Me.DataSet_Prod_Serv.Almacen_Digital.Item(0).OBSERVACIONES
                If lblEstado.Text = "Capturada" Then
                    lblEstado.ForeColor = Color.Green
                ElseIf lblEstado.Text = "Procesada" Then
                    lblEstado.ForeColor = Color.Red
                End If
            Else
                g = Guid.NewGuid
                txtFolio.Text = orden_compra.Folio_Siguiente 'Asigno el siguiente folio a la orden de compra
                lblFolio.Text = orden_compra.Folio_Siguiente 'Asigno el siguiente folio a la orden de compra
                txtCodigoOrden.Text = "ORD-" & g.ToString.Substring(5, 5).ToUpper 'pongo un codigo predeterminado por guid irrepetible
                lblEstado.Text = "En Proceso"
            End If
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Private Sub AtrasBtn_Click(sender As Object, e As EventArgs) Handles AtrasBtn.Click
        FrmCatalogoOrdenCompra.Show()
        _EnTarea = False
        _Editar = False
        Me.Close()
    End Sub

    Private Sub btnMostrarOpciones_Click(sender As Object, e As EventArgs) Handles btnMostrarOpciones.Click
        slideOpciones.IsOpen = True
    End Sub

    Private Sub ButtonItem1_Click(sender As Object, e As EventArgs) Handles ButtonItem1.Click
        slideOpciones.IsOpen = False
    End Sub

    Private Sub txt_Enter(sender As Object, e As EventArgs) Handles txtCodigo.Enter
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        txt.Border.BorderColor2 = SystemColors.MenuHighlight
    End Sub

    Private Sub txt_TextChanged(sender As Object, e As EventArgs) Handles txtCodigo.TextChanged
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        If txt Is txtCodigo Then
            If txt.Text <> "" Then
                lbCodigo.Visible = True
            Else
                lbCodigo.Visible = False
            End If
        End If
    End Sub

    Private Sub btnCancelar_Click(sender As Object, e As EventArgs) Handles btnCancelar.Click
        Me.Close()
    End Sub

    Public Sub Limpia_Todo()
        Try
            For Each ctrl As Control In PageSliderPage1.Controls
                If TypeOf ctrl Is DevComponents.DotNetBar.Controls.TextBoxX Then
                    CType(ctrl, DevComponents.DotNetBar.Controls.TextBoxX).Text = String.Empty
                ElseIf TypeOf ctrl Is DevComponents.DotNetBar.Controls.ComboBoxEx Then
                    CType(ctrl, DevComponents.DotNetBar.Controls.ComboBoxEx).SelectedIndex = 0
                End If
            Next
            For Each ctrl As Control In PageSliderPage2.Controls
                If TypeOf ctrl Is DevComponents.DotNetBar.Controls.TextBoxX Then
                    CType(ctrl, DevComponents.DotNetBar.Controls.TextBoxX).Text = String.Empty
                ElseIf TypeOf ctrl Is DevComponents.DotNetBar.Controls.ComboBoxEx Then
                    CType(ctrl, DevComponents.DotNetBar.Controls.ComboBoxEx).SelectedIndex = 0
                End If
            Next
            Me.DataSet_Prod_Serv.Clear()
            Me.dgvOrdenCompra.Rows.Clear()
            Me.slideFolio.IsOpen = False
        Catch
        End Try
    End Sub

    Private Sub txtCodigo_ButtonCustomClick(sender As Object, e As EventArgs) Handles txtCodigo.ButtonCustomClick
        If cotizacion.Buscar_Codigo(txtCodigo.Text.Trim) Is Nothing Then
            ToastNotification.Show(Me, "Codigo de cotización no encontrado", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            txtCodigo.Text = ""
            Exit Sub
        End If
        Codigo = txtCodigo.Text.Trim
        Me.Cotizacion_ProductoTableAdapter.Fill_CotizaciónDetallada(Me.DataSet_Prod_Serv.Cotizacion_Producto, cotizacion.Buscar_Codigo(txtCodigo.Text.Trim))
        For Each fila As DataGridViewRow In Me.dgvCotizacionDetalle.Rows
            Me.dgvCotizacionDetalle.Rows(fila.Index).Cells(0).Value = Me.DataSet_Prod_Serv.Cotizacion_Producto.Item(fila.Index)(6)
            Me.dgvCotizacionDetalle.Rows(fila.Index).Cells(1).Value = Me.DataSet_Prod_Serv.Cotizacion_Producto.Item(fila.Index)(7)
        Next

    End Sub

    Private Sub txtCodigo_KeyDown(sender As Object, e As KeyEventArgs) Handles txtCodigo.KeyDown
        If e.KeyCode = Keys.Enter Then
            txtCodigo_ButtonCustomClick(Nothing, Nothing)
        End If
    End Sub

    Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles btnAgregar.Click
        If Me.dgvCotizacionDetalle.Rows.Count < 1 Then
            ToastNotification.Show(Me, "Primero debe de buscar una cotización", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If

        If dgvOrdenCompra.Rows.Cast(Of DataGridViewRow)().Any(Function(row) CStr(row.Cells(4).Value) = Me.dgvCotizacionDetalle.CurrentRow.Cells(4).Value) Then
            ToastNotification.Show(Me, "Ese producto de la cotización ya se encuentra en la orden que se esta generando.", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If

        If orden_compra.Buscar_Cotizacion_Orden(Me.dgvCotizacionDetalle.CurrentRow.Cells(4).Value) > 0 Then
            ToastNotification.Show(Me, "Ese producto de la cotización ya se encuentra en una orden.", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        Me.dgvOrdenCompra.Rows.Add()
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(0).Value = Me.dgvCotizacionDetalle.CurrentRow.Cells(0).Value
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(1).Value = Me.dgvCotizacionDetalle.CurrentRow.Cells(1).Value
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(2).Value = Me.dgvCotizacionDetalle.CurrentRow.Cells(2).Value
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(3).Value = Me.dgvCotizacionDetalle.CurrentRow.Cells(3).Value
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(4).Value = Me.dgvCotizacionDetalle.CurrentRow.Cells(4).Value
        Me.dgvOrdenCompra.Rows(Me.dgvOrdenCompra.Rows.Count - 1).Cells(5).Value = Codigo
    End Sub

    Private Sub btnQuitar_Click(sender As Object, e As EventArgs) Handles btnQuitar.Click
        If Me.dgvOrdenCompra.Rows.Count < 1 Then
            ToastNotification.Show(Me, "No hay producto que retirar de la orden de compra", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        Me.dgvOrdenCompra.Rows.Remove(Me.dgvOrdenCompra.CurrentRow)
    End Sub

    Private Sub btnRetroceder_Click(sender As Object, e As EventArgs) Handles btnRetroceder.Click
        Me.slideFolio.IsOpen = False
    End Sub

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        If dgvOrdenCompra.Rows.Count < 1 Then
            ToastNotification.Show(Me, "La orden debe de tener cuando menos un producto de una cotización.", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        If lblEstado.Text <> "Capturada" Then
            ToastNotification.Show(Me, "La orden esta en un proceso posterior a la captura y no puede ser editada.", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        If _Editar Then
            If MessageBoxEx.Show("La acción sera definitiva, desea continuar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Cancel Then
                Exit Sub
            Else
                orden_compra.Delete(_FOLIOCOMPRA)
                For Each fila As DataGridViewRow In Me.dgvOrdenCompra.Rows
                    orden_compra.Insert(Me.dgvOrdenCompra.Rows(fila.Index).Cells(4).Value, _IDUSUARIO, Now.Day & "/" & Now.Month & "/" & Now.Year, lblCodigo.Text, lblFolio.Text)
                Next
                ToastNotification.Show(Me, "Orden modificada con exito", My.Resources.add1, 3000, eToastGlowColor.Blue, eToastPosition.TopCenter)
            End If
        Else
            Me.slideFolio.IsOpen = True
            Me.btnAceptar.Focus()
        End If
    End Sub

    Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
        If txtCodigo.Text.Trim = "" Then
            ToastNotification.Show(Me, "La orden debe de tener un codigo valido.", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        Try
            For Each fila As DataGridViewRow In Me.dgvOrdenCompra.Rows
                orden_compra.Insert(Me.dgvOrdenCompra.Rows(fila.Index).Cells(4).Value, _IDUSUARIO, Now.Day & "/" & Now.Month & "/" & Now.Year, txtCodigoOrden.Text.Trim, txtFolio.Text)
            Next
            almacen_digital.Insert(txtFolio.Text, "C:/", "C:/", False, "Capturada")
            ToastNotification.Show(Me, "Orden creada con exito", My.Resources.add1, 3000, eToastGlowColor.Blue, eToastPosition.TopCenter)
            Limpia_Todo()
            g = Guid.NewGuid
            txtFolio.Text = orden_compra.Folio_Siguiente 'Asigno el siguiente folio a la orden de compra
            txtCodigoOrden.Text = "ORD-" & g.ToString.Substring(5, 5).ToUpper 'pongo un codigo predeterminado por guid irrepetible
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End Try
    End Sub

    Private Sub dgvCotizacionDetalle_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvCotizacionDetalle.CellDoubleClick
        btnAgregar_Click(Nothing, Nothing)
    End Sub
End Class